LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

summary_of_solving_pose

2022/9/13

视觉SLAM求解位姿

把之前学的视觉SLAM的求解位姿总结一下


Bundle Adjustment

定义

从特征点反射出来的几束光线(bundles of light rays)

在姿态和路标点被最优调整(adjustment)之后

最后收束到光心的这个过程,称为Bundle Adjustment,简称BA,也被译做光束平差法


流程

个人觉得涉及到像素点和路标点的映射的最小二乘求解,都可以算是BA的范畴

所以这里具体讲述非线性最小二乘求解的原理,具体映射关系后续分情况讲述


对于任意函数f(x)f(x),求解xx使得12f(x)22\frac{1}{2} {\vert \vert f(x) \vert \vert_2}^2最小,LM方法求解步骤:

①给定初始值x0x_0,以及信赖区域半径μ\mu

②对于第kk次迭代,求解Δxk\Delta x_kDD为约束区域因子(可取II

(JT(xk)J(xk)+λDTD)Δxk=JT(xk)f(xk)(J^T(x_k)J(x_k)+\lambda D^TD)\Delta x_k=-J^T(x_k)f(x_k)

③计算ρ=f(x+Δx)f(x)J(x)Δx\rho= \frac{f(x+\Delta x)-f(x)}{J(x)\Delta x}μ={2μ,ρ>340.5μ,ρ<14\mu =\left\{\begin{matrix} 2\mu,&\rho>\frac{3}{4} \\0.5\mu,&\rho<\frac{1}{4}\end{matrix}\right.

④若ρ\rho大于某阈值,认为近似可行,xk+1=xk+Δxkx_{k+1}=x_k+\Delta x_k

⑤判断算法是否收敛,不收敛则返回2,收敛则结束

使用ceres库可以很方便地求解,我们只需要定义对应的f(x)f(x)和雅可比矩阵JJ即可


常见求解方法

对极几何(2D_2D)

输入:需要一帧的RGB图,需要另一帧的RGB图

输出:可以获得两帧之间的位姿变换,以及两帧图像上的点对应的路标点

流程:

①对两张RGB图特征点提取、计算描述子、特征匹配(匹配后筛选)

②有对极约束:p2T(K1)Tt^RK1p1=0p_2^T{(K^{-1}})^Tt\hat{}RK^{-1}p_1=0,假设E=t^RE=t\hat{}R,八点法或最小二乘求EE

③对结果EE后进行SVD奇异值分解,E=UVTE=U\sum V^T,求出四组解,过滤解得R,tR,t

④获得R,tR,t后三角化求解深度,进而解得路标点PP


P3P(3D_2D)

输入:需要一帧的RGBD图,需要另一帧的RGB图

输出:可以获得两帧之间的位姿变换,以及两帧图像上的点对应的路标点

流程:

①对两张RGB图特征点提取、计算描述子、特征匹配(匹配后筛选)

②对RGBD图的一帧计算路标点

③对一帧的3D点以及对应的另外一帧的2D点,通过几何求解或者通过BA求解位姿


BA求解:

①投影关系为:su=Kexp(ξ^)Psu=Kexp(\xi \hat{})P,定义ei=ui1siKexp(ξ^)Pie_i =u_i-\frac{1}{s_i}Kexp(\xi\hat{})P_i

故问题为求解S=argmin(12i=1nui1siKexp(ξ^)Pi22)S=argmin(\frac{1}{2}\sum^n_{i=1}{\vert\vert u_i-\frac{1}{s_i}Kexp(\xi\hat{})P_i\vert\vert_2}^2)

②求雅可比,eδξ=ePPδξ\frac{\partial e}{\partial \delta\xi}=\frac{\partial e}{\partial P'}\frac{\partial P'}{\partial \delta \xi}P=exp(ξ^)PP'=exp(\xi\hat{})P

eP\frac{\partial e}{\partial P'},像素点对路标点求导,展开各自求导即可;Pδξ\frac{\partial P'}{\partial \delta \xi},采用李代数扰动模型求解即可

eδξ=ePPδξ=[fxZ0fxXZ2fxXYZ2fx+fxX2Z2fxYZ0fyZfyYZ2fyfyY2Z2fyXYZ2fyXZ]\frac{\partial e}{\partial \delta\xi}=\frac{\partial e}{\partial P'}\frac{\partial P'}{\partial \delta \xi}=-\begin{bmatrix} \frac{f_x}{Z'}&0&-\frac{f_xX'}{Z'^2}&-\frac{f_xX'Y'}{Z'^2}&f_x+\frac{f_xX'^2}{Z'^2}&-\frac{f_xY'}{Z'} \\ 0&\frac{f_y}{Z'}&-\frac{f_yY'}{Z'^2}&-f_y-\frac{f_yY'^2}{Z'^2}&\frac{f_yX'Y'}{Z'^2}&\frac{f_yX'}{Z'}\end{bmatrix}


ICP(3D_3D)

输入:需要一帧的RGBD图,需要另一帧的RGBD图

输出:可以获得两帧之间的位姿变换

流程:

①对两张RGB图特征点提取、计算描述子、特征匹配(匹配后筛选)

②对RGBD图的两帧计算路标点

③对两帧的对应的3D点,通过矩阵求解或者通过BA求解位姿


BA求解流程:

①投影关系为:P=RP+tP=RP'+t,定义ei=pi(Rpi+t)e_i=p_i-(Rp_i'+t)

故问题为求解minR,tS=12i=1npi(Rpi+t)22\min_{R,t} \, S=\frac{1}{2}\sum_{i=1}^n{\vert\vert p_i-(Rp_i'+t)\vert\vert_2}^2

②求雅可比,eδξ=ePPδξ\frac{\partial e}{\partial \delta\xi}=\frac{\partial e}{\partial P'}\frac{\partial P'}{\partial \delta \xi}P=exp(ξ^)PP'=exp(\xi\hat{})P

eP\frac{\partial e}{\partial P'},就是I-IPδξ\frac{\partial P'}{\partial \delta \xi},采用李代数扰动模型求解即可

eδξ=ePPδξ=IPδξ=[1000ZY010Z0X001YX0]\frac{\partial e}{\partial \delta\xi}=\frac{\partial e}{\partial P'}\frac{\partial P'}{\partial \delta \xi}=-I\frac{\partial P'}{\partial \delta \xi}=\begin{bmatrix}-1&0&0&0&-Z'&Y' \\0&-1&0&Z'&0&-X'\\0&0&-1&-Y'&X'&0\end{bmatrix}


直接法

输入:需要一帧的RGBD图,需要另一帧的RGB图

①选取求解点,稀疏则用特征点即可,半稠密可以选择梯度较大的点,稠密则为整幅图像的点

②对RGBD图的一帧计算求解点对应的路标点

③对路标点,以及两幅图像,通过BA求解位姿


BA求解流程:

假设空间中一点PP,在第一帧的投影点为p1p_1,在第二帧的投影点为p2p_2

假设第一帧到第二帧的初始估计为R,tR,t

则有p1=1Z1KP,p2=1Z2Kexp(ξ^)Pp_1=\frac{1}{Z_1}KP,p_2=\frac{1}{Z_2}Kexp(\xi\hat{})P

定义光度误差e=I1(p1)I2(p2)e=I_1(p_1)-I_2(p_2)

故有最小二乘问题minξJ=i=1NeiTei\min_{\xi} \, J=\sum_{i=1}^Ne_i^Te_i

根据扰动模型化简得

e(ξδξ)==e(ξ)I2uuqqδξδξe(\xi \, \oplus \delta\xi) = =e(\xi)-\frac{\partial I_2}{\partial u} \frac{\partial u}{\partial q} \frac{\partial q}{\partial \delta \xi}\delta\xi

其中q=δξ^exp(ξ^)P,u=1Z2Kqq =\delta\xi\hat{}exp(\xi\hat{})P,u=\frac{1}{Z_2}Kq

其中I2u\frac{\partial I_2}{\partial u} 表示坐标在图像的梯度,uq\frac{\partial u}{\partial q} 表示像素点对投影点的导数,qδξ\frac{\partial q}{\partial \delta \xi} 表示投影点对位姿的导数,雅可比计算如下:

J=I2uuδξ=I2u[fxZ0fxXZ2fxXYZ2fx+fxX2Z2fxYZ0fyZfyYZ2fyfyY2Z2fyXYZ2fyXZ]J=-\frac{\partial I_2}{\partial u}\frac{\partial u}{\partial \delta \xi}=-\frac{\partial I_2}{\partial u}\begin{bmatrix} \frac{f_x}{Z}&0&-\frac{f_xX}{Z^2}&-\frac{f_xXY}{Z^2}&f_x+\frac{f_xX^2}{Z^2}&-\frac{f_xY}{Z} \\ 0&\frac{f_y}{Z}&-\frac{f_yY}{Z^2}&-f_y-\frac{f_yY^2}{Z^2}&\frac{f_yXY}{Z^2}&\frac{f_yX}{Z}\end{bmatrix}